GdiPlusColor.h revision ee451cb395940862dad63c85adfe8f2fd55e864c
1/**************************************************************************\
2*
3* Copyright (c) 1998-2000, Microsoft Corp.  All Rights Reserved.
4*
5* Module Name:
6*
7*   GdiplusColor.h
8*
9* Abstract:
10*
11*   Represents a GDI+ color.
12*
13\**************************************************************************/
14
15#ifndef _GDIPLUSCOLOR_H
16#define _GDIPLUSCOLOR_H
17
18//----------------------------------------------------------------------------
19// Color mode
20//----------------------------------------------------------------------------
21
22enum ColorMode
23{
24    ColorModeARGB32 = 0,
25    ColorModeARGB64 = 1
26};
27
28//----------------------------------------------------------------------------
29// Color Channel flags
30//----------------------------------------------------------------------------
31
32enum ColorChannelFlags
33{
34    ColorChannelFlagsC = 0,
35    ColorChannelFlagsM,
36    ColorChannelFlagsY,
37    ColorChannelFlagsK,
38    ColorChannelFlagsLast
39};
40
41//----------------------------------------------------------------------------
42// Color
43//----------------------------------------------------------------------------
44
45class Color
46{
47public:
48
49    Color()
50    {
51        Argb = (ARGB)Color::Black;
52    }
53
54    // Construct an opaque Color object with
55    // the specified R, G, B values.
56
57    Color(IN BYTE r,
58          IN BYTE g,
59          IN BYTE b)
60    {
61        Argb = MakeARGB(255, r, g, b);
62    }
63
64    // Construct a Color object with
65    // the specified A, R, G, B values.
66    //
67    // NOTE: R, G, B color values are not premultiplied.
68
69    Color(IN BYTE a,
70          IN BYTE r,
71          IN BYTE g,
72          IN BYTE b)
73    {
74        Argb = MakeARGB(a, r, g, b);
75    }
76
77    // Construct a Color object with
78    // the specified ARGB values.
79    //
80    // NOTE: R, G, B color components are not premultiplied.
81
82    Color(IN ARGB argb)
83    {
84        Argb = argb;
85    }
86
87    // Extract A, R, G, B components
88
89    BYTE GetAlpha() const
90    {
91        return (BYTE) (Argb >> AlphaShift);
92    }
93
94    BYTE GetA() const
95    {
96        return GetAlpha();
97    }
98
99    BYTE GetRed() const
100    {
101        return (BYTE) (Argb >> RedShift);
102    }
103
104    BYTE GetR() const
105    {
106        return GetRed();
107    }
108
109    BYTE GetGreen() const
110    {
111        return (BYTE) (Argb >> GreenShift);
112    }
113
114    BYTE GetG() const
115    {
116        return GetGreen();
117    }
118
119    BYTE GetBlue() const
120    {
121        return (BYTE) (Argb >> BlueShift);
122    }
123
124    BYTE GetB() const
125    {
126        return GetBlue();
127    }
128
129    // Retrieve ARGB values
130
131    ARGB GetValue() const
132    {
133        return Argb;
134    }
135
136    VOID SetValue(IN ARGB argb)
137    {
138        Argb = argb;
139    }
140
141    VOID SetFromCOLORREF(IN COLORREF rgb)
142    {
143        Argb = MakeARGB(255, GetRValue(rgb), GetGValue(rgb), GetBValue(rgb));
144    }
145
146    COLORREF ToCOLORREF() const
147    {
148        return RGB(GetRed(), GetGreen(), GetBlue());
149    }
150
151public:
152
153    // Standard color constants
154    enum
155    {
156       Black = 0xff000000,
157       Silver = 0xffc0c0c0,
158       Gray = 0xff808080,
159       White = 0xffffffff,
160       Maroon = 0xff800000,
161       Red = 0xffff0000,
162       Purple = 0xff800080,
163       Fuchsia = 0xffff00ff,
164       Green = 0xff008000,
165       Lime = 0xff00ff00,
166       Olive = 0xff808000,
167       Yellow = 0xffffff00,
168       Navy = 0xff000080,
169       Blue = 0xff0000ff,
170       Teal = 0xff008080,
171       Aqua = 0xff00ffff
172    };
173
174    // Shift count and bit mask for A, R, G, B components
175    enum
176    {
177        AlphaShift  = 24,
178        RedShift    = 16,
179        GreenShift  = 8,
180        BlueShift   = 0
181    };
182
183    enum
184    {
185        AlphaMask   = 0xff000000,
186        RedMask     = 0x00ff0000,
187        GreenMask   = 0x0000ff00,
188        BlueMask    = 0x000000ff
189    };
190
191    // Assemble A, R, G, B values into a 32-bit integer
192    static ARGB MakeARGB(IN BYTE a,
193                         IN BYTE r,
194                         IN BYTE g,
195                         IN BYTE b)
196    {
197        return (((ARGB) (b) <<  BlueShift) |
198                ((ARGB) (g) << GreenShift) |
199                ((ARGB) (r) <<   RedShift) |
200                ((ARGB) (a) << AlphaShift));
201    }
202
203protected:
204
205    ARGB Argb;
206};
207
208#endif
209
210